const Ts = require('tesseract.js')

// const {Jimp} = require('jimp');
const path = require('path');

async function preprocessImage(imagePath) {
    console.log('开始预处理图像...',);
    
    // 使用Jimp加载并预处理图像
    const image = await Jimp.read(imagePath);
    // 转换为灰度图像
    image.greyscale().contrast(1).brightness(1);
    // 二值化
    image.threshold({
        max: 120,
        autoGreyscale: true
    });


    // 保存临时文件供Tesseract使用
    const tempImagePath = path.join(__dirname, 'temp', 'preprocessed.png');
    await image.write(tempImagePath);
    return tempImagePath;
}

async function s(){
    let imagePath = path.join(__dirname, 'debug','10.png')
    imagePath = await preprocessImage(imagePath);
    console.log('加工之后的图片',imagePath);
    
    let { data: { text } } = await Ts.recognize( imagePath , 'eng',{
        // logger: m => console.log(m)
    })
    // 提取text里面的数字
    if(text && (/\d+/g).test(text) ){
        text = text.match(/\d+/g).join('');
        console.log('识别验证码:',text);
    }else {
        console.log('识别验证码:',text || '');
    }
}


// (async () => {
// const worker = await createWorker({
//     langPath: path.join(__dirname, 'tessdata'),
// });
//     await worker.load();
// await worker.loadLanguage('eng');
// await worker.initialize('eng');
// const { data: { text } } = await worker.recognize(path.join(__dirname, 'debug','2.png'));
// console.log(text);
// await worker.terminate();
// })()

// const cv = require('opencv4nodejs-prebuilt');
// console.log(cv);
// return

// const { Jimp } = require('jimp');
// const path = require('path');

// async function preprocessImage(imagePath) {
//     console.log('开始预处理图像...');

//     // 读取图像
//     const img = cv.imread(imagePath);

//     // 灰度化
//     const grayImg = img.bgrToGray();

//     // 二值化
//     const binaryImg = grayImg.threshold(127, 255, cv.THRESH_BINARY_INV);

//     // 形态学操作 - 开运算（先腐蚀后膨胀）
//     const kernel = cv.Mat.ones(3, 3, cv.CV_8U);
//     const erodedImg = binaryImg.erode(kernel);
//     const openedImg = erodedImg.dilate(kernel);

//     // 中值滤波
//     const filteredImg = openedImg.medianBlur(3);

//     // 将OpenCV图像转换为Jimp图像以便保存
//     const buffer = filteredImg.umat.getData();
//     const jimpImg = await Jimp.read(buffer.buffer);

//     // 保存预处理后的图片
//     await jimpImg.writeAsync(path.join(__dirname, 'temp', 'preprocessed.png'));
//     console.log('图像预处理完成');
// }

// // 确保目标目录存在
// const fs = require('fs');
// const { log } = require('console');
// if (!fs.existsSync(path.join(__dirname, 'temp'))) {
//     fs.mkdirSync(path.join(__dirname, 'temp'), { recursive: true });
// }

// // 调用函数进行图像预处理
// preprocessImage(path.join(__dirname, 'debug', '2.png'))
//     .catch(console.error);

const sharp = require('sharp');

let im = path.join(__dirname, 'debug','7.png')

sharp(im)
  .threshold(220) // 自定义二值化，阈值可调
  .blur(0.4) // 轻微模糊，去除小噪点
  .toFile('output.jpg')
  .then(async () => {
    console.log('Image processed successfully!');
    let imagePath = path.join(__dirname, 'output.jpg');
    let { data: { text } } = await Ts.recognize( imagePath , 'eng',{
        // logger: m => console.log(m)
    })
    console.log('识别验证码:',text);
  });